/**
 * Int-Zahlen-Spielerei
 * Menuebasierte Operationen mit int-Zahlen
 * 
 * Eingabe realisiert mit I/O-Stream ohne Swing
 * 
 * Mehrfach genutzte Methoden sind ausgegliedert
 * 
 * @author Torbjoern K.
 */

import java.util.ResourceBundle;

public class main {
    // definieren einer Abkuerzung fuer Internationalisierung
    private static final ResourceBundle internationalize = java.util.ResourceBundle.getBundle("internationalize");
    
    /**
     * Gibt ein Menu aus, ueber das ein n-stelliger Array mit Int-Zahlen
     * gefuellt, ausgelesen und modifiziert werden kann. Ebenso koennen
     * andere Rechenoperationen durchgefuehrt werden. Standardmaessig wird 
     * ein 3-stelliger Array genutzt.
     * 
     * @param args
     */
    public static void main(String[] args) {
        // Variablen deklarieren
        boolean menu = true;
        int menu_choose = -1, n = 0, m = 0, arrayLength = 0, result = 0, zahl = 0;
        int[] zahlenArray = {0};
        int[][] matrix = {{0}};
        long zahlL;
        
        while(menu == true) {
            // Menu ausgeben
            output.menu();
            
            // Benutzerwahl abfragen
            System.out.print(internationalize.getString("YourChoose?"));
            menu_choose = input.readInt(); // Benutzereingabe erwarten
            System.out.println("");
            
            // 1. Menupunkt - Zahlen eingeben
            if(menu_choose == 1) {
                System.out.println(internationalize.getString("EnterArrayLength") + ": ");
                arrayLength = input.readInt();
                zahlenArray = new int[arrayLength];
                zahlenArray = input.inputArray(zahlenArray);
                System.out.println("");
            }
            
            // 2. Menupunkt - Zahlen ausgeben
            else if(menu_choose == 2) {
                System.out.println(internationalize.getString("ArrayValues") + ": ");
                output.printArray(zahlenArray);
                System.out.println("");
            }
            
            // 3. Menupunkt - Zahlen aendern
            else if(menu_choose == 3) {
                for(int i = 0; i < zahlenArray.length; i++) {
                    System.out.println((i+1) + internationalize.getString("XElement") + zahlenArray[i] + ". " + internationalize.getString("NewValue") + ": ");
                    zahlenArray[i] = input.readInt();
                }
            }
            
            // 4. Menupunkt - Summe aller Elemente berechnen
            else if(menu_choose == 4) {
                for(int i = 0; i < zahlenArray.length; i++) {
                    result += zahlenArray[i];
                }
                System.out.println(internationalize.getString("SumOfArray") + result + "\n");
            }
            
            // 5. Menupunkt - Zahl ziffernweise in Array parsen
            else if(menu_choose == 5) {
                System.out.println(internationalize.getString("PleaseEnterInt") + ": ");
                zahl = input.readInt(); // Benutzereingabe erwarten
                n = input.getIntLength(zahl);
                zahlenArray = new int[n];
                zahlenArray = input.parseIntoArray(zahl, n);
            }
            
            // 6. Menupunkt - Quersumme einer Zahl berechnen
            else if(menu_choose == 6) {
                System.out.println(internationalize.getString("PleaseEnterInt") + ": ");
                zahl = input.readInt(); // Benutzereingabe erwarten
                result = mathutils.quersumme(zahl);
                System.out.println(internationalize.getString("SumOfDigits") + zahl + " " + internationalize.getString("Is") + result + "\n");
            }
            
            // 7. Menupunkt - Fakultaet einer Zahl berechnen
            else if(menu_choose == 7) {
                System.out.println(internationalize.getString("PleaseEnterInt") + ": ");
                zahl = input.readInt();
                zahlL = mathutils.fakultaet(zahl);
                System.out.println(internationalize.getString("PowerOf") + zahl + internationalize.getString("Is") + zahlL + "\n");
            }
            
            // 8. Menupunkt - nXm-Matrix einlesen
            else if(menu_choose == 8) {
                System.out.println(internationalize.getString("NumberColums"));
                n = input.readInt();
                System.out.println(internationalize.getString("NumberRows"));
                m = input.readInt();
                matrix = input.inputMatrix(n, m);
            }
            
            // 9. Menupunkt - nXm-Matrix ausgeben
            else if(menu_choose == 9) {
                System.out.println("Werte der Matrix: ");
                output.printMatrix(matrix);
                System.out.println("");
            }
            
            // 0. Menupunkt - Programm beenden
            else if(menu_choose == 0) {
                System.out.println(internationalize.getString("Bye"));
                System.exit(0); // Programm beenden
            }
            
            // Fehlerhafte Eingabe abfangen
            else {
                System.out.println(internationalize.getString("ErrorWrongInput"));
            }
        }
    }
}